﻿#include <QCoreApplication>
#include <QTextStream>
#include <iostream>
using namespace std;

long double pow(int x,int n);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream in(stdin);
    QList<QString> strs;
    QList<int> nums;
    QString str="";
    QString abs="";
    int notNumFlag=0;

    while(1)
    {
        nums.clear();     //清除nums中上一轮存储的数字

        cout<<"*****************************************实现幂运算函数********************************************"<<endl;
        cout<<endl;
        cout<<"请按照顺序输入底数和指数（两个数字必须是整数，它们之间以任意长的空格分隔，按回车键结束输入）："<<endl;
        str=in.readLine();     //读取输入的一行
        strs=str.split(" ",QString::SkipEmptyParts);     //按空格分割字符串
        cout<<endl;

        //限制输入为两个数字
        if(strs.size()!=2)
        {
            cout<<"输入有误，请重新输入！"<<endl;
            system("pause");
            system("cls");
            continue;
        }

        QRegExp rx("\\D+");     //正则表达式：匹配一个及以上的非数字
        int notNumber;     //如果notNumber不等于-1，那么这个字符串必然含有一个非数字

        for(int i=0;i<strs.size();++i)
        {
            //如果第一个字符是负号，去掉负号后再进行匹配
            if(strs[i][0]=="-")
            {
                abs=strs[i];
                abs.remove(0,1);
                notNumber=rx.indexIn(abs);
            }else {
                notNumber=rx.indexIn(strs[i]);
            }

            //如果notNumber不等于-1，那么这个字符串必然含有一个非数字
            if((notNumber>=0))
            {
                cout<<"您输入的不是整数！"<<endl;
                notNumFlag=1;
                system("pause");
                system("cls");
                break;
            }

            nums.append(strs[i].toInt());     //将字符串转化为数字，并依次存入nums中
        }

        if(notNumFlag==0)
        {
            long double power=pow(nums[0],nums[1]);
            cout<<"幂运算的结果为：pow("<<nums[0]<<","<<nums[1]<<")="<<power<<endl;
            cout<<endl;
            system("pause");
            system("cls");
        }else {
            notNumFlag=0;
        }
    }


    return a.exec();
}


long double pow(int x,int n)
{
    //当n=0时，结果为1
    if(abs(n))
    {
        long double power=x;
        for(int i=1;i<abs(n);++i)
        {
            power=power*x;
        }

        //判定n的正负
        if(n>0)
        {
            return power;
        }else {
            return 1/power;
        }

    }else {
        return 1;
    }

}
